<?php
namespace App\Http\Questionnaire\Controllers;

use Illuminate\Http\Request;
use App\Http\Admin\Controllers\Controller as Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;

class ProblemController  extends Controller
{

    public function __construct(Request $request){
        $token = getToken($request);
        $uid =Redis::get("code:".$token);
        $this->uid=$uid;
    }

    


    public function select_only($pid){

        $res = DB::table("q_problem as qp")->where("qp.id",$pid)
            ->get();
            $child = DB::table("q_answer")->where("problemId",$pid)->get();
        if($child){
            $res['child']=$child;
        }
        return $res;
    }


    /*
     *  返回请求页面基本数据
     *  @author 小林《1814992057@qq.com》
     *  @datetime   2019/11/19
     *  @request    get
     *  @return array
     *          problemType array 问题类型
     *          problemRe array 问题验证
     *          problemStatus array 问题是否必选
     * */
    public function created(){
        return [
            'status_code'      => 200,
            'message'     =>  '请求成功',
            'data' => create(['problemType','problemRe'])
        ];
    }

    /*
     *  创建问题
     *  @author 小林《1814992057@qq.com》
     *  @datetime   2019/11/19
     *  @request    post
     *  @Param title        String  标题         title存在 格式为非空白字符 长度大于2小于20
     *  @Param type         Int     问题类型      type存在  格式为字数字 长度等于1
     *  @Param re           Int     问题验证      re存在  格式为字数字 长度等于1
     *  @Param imgs         File    实例图片      非必填 imgs 存在的时候并且为数组的时候 并且图片的格式正确
     *  @Param status       Int     是否禁用      status存在 格式为字数字 长度等于1
     * */

    public function add(Request $request){

        //title错误32001 status错误32005 type错误32003 imgs错误32006 re错误32007
        $data=$request->only("title","status","type","imgs","placeholder","copy","imgs");


        if(array_key_exists('imgs',$data)&&!is_array($data['imgs'])) return ThrowApiExc('32033');

        //验证
        //图片存在的时候并且为数组的时候 并且图片的格式正确
        if(array_key_exists('imgs',$data)&&is_array($data['imgs'])){
            $imgsRe=['jpg','jpeg','png','gif'];



//            foreach ($data['imgs'] as $k=>$v){

//                if(!array_key_exists($v->getClientOriginalExtension(),$imgsRe)){
//                    return ThrowApiExc('32008');
//                }

//            }
        }


        //title不存在 格式为空白字符 长度少于2大与20
        if(array_key_exists('title',$data)&&!preg_match('/^[\S\s]{2,20}$/u',$data['title'])) return ThrowApiExc('32001');
        //type不存在 格式为非字数字 长度不等于1
        if(array_key_exists('type',$data)&&!preg_match('/^[\d]{1,2}$/u',$data['type'])) return ThrowApiExc('32002');
        if($data['type']==1){
        //re不存在 格式为非字数字 长度不等于1
        $data=$request->only("title","status","type","imgs","re","placeholder","copy","imgs");
        if(!array_key_exists('re',$data)||!preg_match('/^[\d]{1}$/u',$data['re'])) return ThrowApiExc('32007');
        }
        //status不存在 格式为非字数字 长度不等于1
        if(!array_key_exists('status',$data)||!preg_match('/^[\d]{1}$/u',$data['status'])) return ThrowApiExc('32005');



        if(array_key_exists('imgs',$data)){    //判断是否有图片
            $imgurl=array();    //阿里云oss图片的链接
            if($data['imgs']==""){
                foreach ($data['imgs'] as $k=>$v) {

                    $imgName = "problem/".date("Y",time())."/".date("m",time())."/".date("d",time())."/".date("YmdHis", time()) . rand(1000, 9999) . rand(1000, 9999) . "." . $v->getClientOriginalExtension();  //文件重命名

                    $imgurl[$k] = Oss($v, $imgName)['info']['url'];  //通过封装的组件上传阿里云oss

                }
                $data['imgs']=json_encode($imgurl);
            }else{
                $data['imgs']="";
            }
        }

        $data['createdTime']=date("Y-m-d H:i:s",time());
        $data['updateTime']=date("Y-m-d H:i:s",time());
        $data['createdUid']=$this->uid;
        $data['updateUid']=$this->uid;

        $res = DB::table("q_problem")->insertGetId($data);  //上传数据库

        if($res){
            return [
                'status_code'      => 200,
                'message'     =>  '提交成功',
                'data' => $res
            ];
        }else{
            return [
                'status_code'      => 200,
                'message'     =>  '提交失败 联系后端开发',
                'data' => $res
            ];
        }

    }


    /*
     *  修改问题
     *  @author 小林《1814992057@qq.com》
     *  @datetime   2019/11/19
     *  @request    put
     *  @Param title        String  标题         title存在 格式为非空白字符 长度大于2小于20
     *  @Param type         Int     问题类型      type存在  格式为字数字 长度等于1
     *  @Param re           Int     问题验证      re存在  格式为字数字 长度等于1
     *  @Param imgs         File    实例图片      非必填 imgs 存在的时候并且为数组的时候 并且图片的格式正确
     *  @Param status       Int     是否禁用      status存在 格式为字数字 长度等于1
     * */

    public function update(Request $request,$pid){
        
        //title错误32001 status错误32005 type错误32003 imgs错误32006 re错误32007
        $data=$request->only("title","status","type","imgs","placeholder","copy","imgs");

//        if(in_array("imgs",$request->all())) $data['imgs']=$request->all()['imgs'];



        //验证
        //图片存在的时候并且为数组的时候 并且图片的格式正确
        if(array_key_exists('imgs',$data)&&is_array($data['imgs'])){
            $imgsRe=['jpg','jpeg','png','gif'];
            foreach ($data['imgs'] as $k=>$v){

                // if(!array_key_exists($v->getClientOriginalExtension(),$imgsRe)){
                //     return ThrowApiExc('32008');
                // }

            }
        }

        //title不存在 格式为空白字符 长度少于2大与20
        if(array_key_exists('title',$data)&&!preg_match('/^[\S\s]{2,20}$/u',$data['title'])) return ThrowApiExc('32001');
//        type不存在 格式为非字数字 长度不等于1
        if(array_key_exists('type',$data)&&!preg_match('/^[\d]{1,2}$/u',$data['type'])) return ThrowApiExc('32002');
        if($data['type']==1){
            //re不存在 格式为非字数字 长度不等于1
            $data=$request->only("title","status","type","imgs","re","placeholder","copy","imgs");
            if(!array_key_exists('re',$data)||!preg_match('/^[\d]{1}$/u',$data['re'])) return ThrowApiExc('32007');
        }
        //status不存在 格式为非字数字 长度不等于1
        if(array_key_exists('status',$data)&&!preg_match('/^[\d]{1}$/u',$data['status'])) return ThrowApiExc('32005');


        if(array_key_exists('imgs',$data)){    //判断是否有图片
            $imgurl=array();    //阿里云oss图片的链接
            if($data['imgs']!=""){
                foreach ($data['imgs'] as $k=>$v) {

                    $imgName = "problem/".date("Y",time())."/".date("m",time())."/".date("d",time())."/".date("YmdHis", time()) . rand(1000, 9999) . rand(1000, 9999) . "." . $v->getClientOriginalExtension();  //文件重命名

                    $imgurl[$k] = Oss($v, $imgName)['info']['url'];  //通过封装的组件上传阿里云oss
                }
                $data['imgs']=json_encode($imgurl);
            }else{
                $data['imgs']="";
            }


        }

        $data['updateTime']=date("Y-m-d H:i:s",time());
        $data['updateUid']=$this->uid;

        $res = DB::table("q_problem")->where("id",$pid)->update($data);  //上传数据库


        if($res){
            return [
                'status_code'      => 200,
                'message'     =>  '提交成功',
                'data' => $res
            ];
        }else{
            return [
                'status_code'      => 200,
                'message'     =>  '提交失败 联系后端开发',
                'data' => $res
            ];
        }

    }

    /*
     *  查询问题
     *  @author 小林《1814992057@qq.com》
     *  @datetime   2019/11/19
     *  @request    get
     *  @Param      title 标题
     *  @return 问题id 标题 类型 创建时间 修改时间 是否必填 验证规则 创建人 修改人
     * */
    public function select(Request $request){

        $data=$request->only('title');

        $where = array();

        foreach($data as $k=>$v){
            switch($k){
                case "title":
                    $where[]=['title','like','%'.$v.'%'];
                    break;
            }
        }

        $res = DB::table('q_problem as q_p')
            ->select("q_p.*","u.name as createdUid","u2.name as updateUid")
            ->leftJoin("users as u","u.id","=","q_p.createdUid")
            ->leftJoin("users as u2","u2.id","=","q_p.updateUid")
            ->where($where)
            ->paginate(20);

        return [
            'status_code'      => 200,
            'message'     =>  '请求成功',
            'data' => $res
        ];

    }

    /*
      *  删除问题
      *  @author 小林《1814992057@qq.com》
      *  @datetime   2019/11/19
      *  @request    delete
      *  @return     array
      * */
    public function delete($pid){

        $res = DB::table("q_problem")->where("id",$pid)->delete();
        return [
            'status_code'      => 200,
            'message'     =>  '删除成功',
            'data' => $res
        ];

    }

    /*
      *  添加选项
      *  @author 小林《1814992057@qq.com》
      *  @datetime   2019/11/19
      *  @request    post
      *  @Param      label
      *  @Param      status
      *  @return     array
      * */
    public function add_answer(Request $request,$pid){
        //title不存在 格式为空白字符 长度少于2大与20
        $data = $request->only('label','status');
        if(!array_key_exists('label',$data)||!preg_match('/^[\S\s]{1,30}$/u',$data['label'])) return ThrowApiExc('32010');
        //status不存在 格式为非字数字 长度不等于1
        if(!array_key_exists('status',$data)||!preg_match('/^[\d]{1}$/u',$data['status'])) return ThrowApiExc('32005');
        $data['createdTime']=date("Y-m-d H:i:s",time());
        $data['createdUid']=$this->uid;

        $answer = DB::table("q_answer")
            ->where("problemId",$pid)
            ->orderBy("value","desc")
            ->first();

        if($answer){
            $data['value']=$answer['value']+1;
        }else{
            $data['value']=1;
        }
        $data['problemId']=$pid;

//        return $answer;
//        if(!in_array($answer['type'],['1','2','10'])) return ThrowApiExc('32009');
        $res = DB::table("q_answer")->insertGetId($data);
        if($res){
            return [
                'status_code'      => 200,
                'message'     =>  '提交成功',
                'data' => $res
            ];
        }else{
            return [
                'status_code'      => 200,
                'message'     =>  '提交失败 联系后端开发',
                'data' => $res
            ];
        }
    }

    /*
      *  删除选项
      *  @author 小林《1814992057@qq.com》
      *  @datetime   2019/11/19
      *  @request    delete
      *  @Param      title String 名称
      *  @return     array
      * */
    public function delete_answer($aid){
        $res = DB::table("q_answer")->where("id",$aid)->delete();
        if($res){
            return [
                'status_code'      => 200,
                'message'     =>  '删除成功',
                'data' => $res
            ];
        }else{
            return [
                'status_code'      => 200,
                'message'     =>  '提交失败 联系后端开发',
                'data' => $res
            ];
        }
    }

    public function demo_addimg(Request $request){

        $data['imgs']=$request->file("imgs");



        if(array_key_exists('imgs',$data)){    //判断是否有图片
            $imgurl=array();    //阿里云oss图片的链接

            foreach ($data['imgs'] as $k=>$v) {

                $imgName = date("YmdHis", time()) . rand(1000, 9999) . rand(1000, 9999) . ".". $v->getClientOriginalExtension(); //文件重命名
                $imgurl[$k] = Oss($v, $imgName)['info']['url'];  //通过封装的组件上传阿里云oss
                var_dump($imgurl[$k]);

            }

            $data['imgs']=json_encode($imgurl);


        }





    }




}
